package com.sunny.design.builder;

/**
 * 建造者模式（Builder Pattern）
 *  建造者模式是将一个复杂对象的构建过程与它的表示分离，使得同样的构建过程可以创建不同的表示
 *  属于创建型模式
 *  使用建造者模式对于用户而言只需指定需要建造的类型就可以获得对象，建造过程及细节不需要了解。
 *
 * 优点：
 *  1、封装性好，创建和使用分离；
 *  2、扩展性好，建造类之间独立、一定程度上解耦。
 *
 * 缺点：
 *  1、产生多余的 Builder 对象；
 *  2、产品内部发生变化，建造者都要修改，成本较大。
 *
 * 建造者模式和工厂模式的区别：
 *  1、建造者模式更加注重方法的调用顺序，工厂模式注重于创建对象。
 *  2、创建对象的力度不同，建造者模式创建复杂的对象，由各种复杂的部件组成，工厂模式创建出来的都一样。
 *  3、关注重点不一样，工厂模式模式只需要把对象创建出来就可以了，而建造者模式中不仅要创建出这个对象，还要知道这个对象由哪些部件组成。
 *  4、建造者模式根据建造过程中的顺序不一样，最终的对象部件组成也不一样。
 *
 * @author Sunny
 * @date 2020/3/1
 */
public class FoodBuilder {

    private Food food = new Food();

    public FoodBuilder name(String name) {
        food.setName(name);
        return this;
    }

    public FoodBuilder salt(boolean salt) {
        food.setSalt(salt);
        return this;
    }

    public FoodBuilder soySauce(boolean soySauce) {
        food.setSoySauce(soySauce);
        return this;
    }

    public FoodBuilder cumin(boolean cumin) {
        food.setCumin(cumin);
        return this;
    }

    public Food build() {
        return this.food;
    }
}
